package co.edu.udea.iw.server.server;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletContext;

import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import co.edu.udea.iw.bl.ClienteBL;
import co.edu.udea.iw.dto.Cliente;
import co.edu.udea.iw.client.server.ClienteService;
import co.edu.udea.iw.exception.IWBLException;
import co.edu.udea.iw.exception.IWDaoException;
import co.edu.udea.iw.shared.ClienteListado;

import com.google.gwt.rpc.client.impl.RemoteException;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;

public class ClienteServiceImpl extends RemoteServiceServlet implements ClienteService {

	@Override
	public void guardarCliente(String cedula, String nombres, String apellidos,
			String correo) {
		
			ServletContext sc = getServletContext();
			ApplicationContext webApp = WebApplicationContextUtils.getWebApplicationContext(sc);
			
			try{
				ClienteBL clienteBL = (ClienteBL)webApp.getBean("clienteBL");
				clienteBL.guardar(cedula, nombres, apellidos, correo, "elver");
			}catch (IWBLException e) {
				e.getStackTrace();
			}catch (IWDaoException e) {
				e.getStackTrace();
			}
	}

	@Override
	public List<ClienteListado> obtenerClientes() {
		
		ServletContext sc = getServletContext();
		ApplicationContext webApp = WebApplicationContextUtils.getWebApplicationContext(sc);
		
		List<Cliente> lista = new ArrayList<Cliente>();
		
		List<ClienteListado> listaResultado = new ArrayList<ClienteListado>();
		
		try{
			ClienteBL clienteBL = (ClienteBL)webApp.getBean("clienteBL");
			
			lista = clienteBL.obtenerClientes();
			
			for(Cliente cliente : lista){
				ClienteListado cl = new ClienteListado();
				
				cl.setCedula(cliente.getCedula());
				cl.setNombreCompleto(cliente.getNombres() + " " + cliente.getApellidos());
				cl.setCorreo(cliente.getCorreoElectronico());
				
				listaResultado.add(cl);
			}
			
			
			
		}catch (IWBLException e) {
			e.getStackTrace();
		}catch (IWDaoException e) {
			e.getStackTrace();
		}
		
		return listaResultado;
	}

	@Override
	public void eliminarCliente(String cedula) {
		ServletContext sc = getServletContext();
		ApplicationContext webApp = WebApplicationContextUtils.getWebApplicationContext(sc);
		Cliente cliente = null;
		
		try{
			ClienteBL clienteBL = (ClienteBL)webApp.getBean("clienteBL");
			
			cliente = clienteBL.obtener(cedula);
			if(cliente != null)
				clienteBL.eliminar(cliente);
			else{
				throw new NullPointerException("El cliente no existe");
			}
		}catch (IWBLException e) {
			e.getStackTrace();
		}catch (IWDaoException e) {
			e.getStackTrace();
		}
		
	}
}
